class Solution {
public:
    bool validateStackSequences(vector<int>& pushed, vector<int>& popped) {
        int pushedSize = pushed.size();
        int poppedSize = popped.size();

        if(poppedSize != pushedSize)  return false;
        else if(!pushedSize && !poppedSize)  return true;
        /*
        使用一个栈模拟出入栈过程(建立辅助栈)；
        若栈顶元素等于当前出栈数组的元素，则意味着该元素将被出栈，此时执行出栈操作，并判断接下来是否继续出；
        入栈完毕后，若栈内不为空，则继续检查栈内元素出栈顺序是否与出栈数组内排列顺序相同
        */
        stack<int> st;
        int pushedptr = 0;
        int poppedptr = 0;
        st.push(pushed[pushedptr]);
        while(pushedptr < pushedSize){
            //模拟入栈过程
            if(!st.empty() && st.top() == popped[poppedptr]){
                //有一些提前出栈的元素
                st.pop();
                ++poppedptr;
                continue;
            }
            st.push(pushed[pushedptr]);
            ++pushedptr;
        }

        while(!st.empty() && poppedptr < poppedSize){
            if(st.top() == popped[poppedptr]){
                st.pop();
                ++poppedptr;
            }else{
                return false;
            }
        }

        return true;
    }
};